package com.lee.dianjiqi;

import android.text.TextUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateHelper {


    private static final String TAG = "DateHelper";


    /**
     * 彩票打印时间
     */
    public static String FORMAT_CAIPIAO = "yyyy/MM/dd-HH:mm:ss";


    /**
     * 英文简写如：2010
     */
    public static String FORMAT_Y = "yyyy";


    /**
     * 设置系统时间的时间格式
     */
    public static String FORMAT_SET_TIME = "yyyyMMdd.HHmmss";

    /**
     * 英文简写如：12:01
     */
    public static String FORMAT_HM = "HH:mm";

    /**
     * 英文简写如：1-12 12:01
     */
    public static String FORMAT_MDHM = "MM-dd HH:mm";

    /**
     * 英文简写（默认）如：2010-12-01
     */
    public static String FORMAT_YMD = "yyyy-MM-dd";

    /**
     * 英文全称  如：2010-12-01 23:15
     */
    public static String FORMAT_YMDHM = "yyyy-MM-dd HH:mm";

    /**
     * 英文全称  如：2010-12-01 23:15:06
     */
    public static String FORMAT_YMDHMS = "yyyy-MM-dd HH:mm:ss";

    /**
     * 精确到毫秒的完整时间    如：yyyy-MM-dd HH:mm:ss.S
     */
    public static String FORMAT_FULL = "yyyy-MM-dd HH:mm:ss.SSS";

    /**
     * 精确到毫秒的完整时间    如：yyyy-MM-dd HH:mm:ss.S
     */
    public static String FORMAT_FULL_SN = "yyyyMMddHHmmssS";
    public static String FORMAT_FULL_S = "yyyyMMddHHmmss";

    /**
     * 中文简写  如：2010年12月01日
     */
    public static String FORMAT_YMD_CN = "yyyy年MM月dd日";

    /**
     * 中文简写  如：2010年12月01日  12时
     */
    public static String FORMAT_YMDH_CN = "yyyy年MM月dd日 HH时";

    /**
     * 中文简写  如：2010年12月01日  12时12分
     */
    public static String FORMAT_YMDHM_CN = "yyyy年MM月dd日 HH时mm分";

    /**
     * 中文全称  如：2010年12月01日  23时15分06秒
     */
    public static String FORMAT_YMDHMS_CN = "yyyy年MM月dd日  HH时mm分ss秒";

    /**
     * 精确到毫秒的完整中文时间
     */
    public static String FORMAT_FULL_CN = "yyyy年MM月dd日  HH时mm分ss秒SSS毫秒";

    public static Calendar calendar = null;
    public static final String FORMAT = "yyyy-MM-dd HH:mm:ss";

    public static final String FORMAT_COUNT = "HH:mm:ss:SSS";



    public static final String FORMAT_YYMD = "yyyyMMdd";


    public static final SimpleDateFormat FORMATTER_SS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 获取当前系统时间
     */
    public static String getCurDateTime() {
        return getStrByFormat(new Date(), FORMATTER_SS);
    }

    /**
     * 根据format类型得到时间对象的字符串格式
     *
     * @param date
     * @param format
     * @return
     */
    public static String getStrByFormat(Date date, DateFormat format) {
        return format.format(date);
    }

    public static String getFormatedDateTimeDay(Date date) {
        SimpleDateFormat dateFormator = new SimpleDateFormat("yyyy-MM-dd");
        return dateFormator.format(date);
    }

    /**
     * 自定义format串码
     *
     * @param formarStr
     * @return
     */

    public static String formatDate(String formarStr) {
        SimpleDateFormat dateFormator = new SimpleDateFormat(formarStr);
        return dateFormator.format(new Date());
    }

    /**
     * 获取系统当前日期
     *
     * @return
     */
    public static String getFormatedDate() {
        Date date = getCurrentDate();
        SimpleDateFormat dateFormator = new SimpleDateFormat("yyyy-MM-dd");
        return dateFormator.format(date);
    }

    public static Date getCurrentDate() {
        return new Date(System.currentTimeMillis());
    }

    public static Date str2Date(String str) {
        return str2Date(str, null);
    }


    public static Date str2Date(String str, String format) {

        if (str == null || str.length() == 0) {
            return null;
        }
        if (format == null || format.length() == 0) {
            format = FORMAT;
        }
        Date date = null;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            date = sdf.parse(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }


    public static Calendar str2Calendar(String str) {
        return str2Calendar(str, null);
    }


    public static Calendar str2Calendar(String str, String format) {

        Date date = str2Date(str, format);
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);

        return c;
    }


    public static String date2Str(Calendar c) {// yyyy-MM-dd HH:mm:ss
        return date2Str(c, null);
    }


    public static String date2Str(Calendar c, String format) {
        if (c == null) {
            return null;
        }
        return date2Str(c.getTime(), format);
    }


    public static String date2Str(Date d) {// yyyy-MM-dd HH:mm:ss
        return date2Str(d, null);
    }


    public static String date2Str(Date d, String format) {// yyyy-MM-dd HH:mm:ss
        if (d == null) {
            return null;
        }
        if (format == null || format.length() == 0) {
            format = FORMAT;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        String s = sdf.format(d);
        return s;
    }


    public static String getCurDateStr() {
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        return c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" +
                c.get(Calendar.DAY_OF_MONTH) + "-" +
                c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) +
                ":" + c.get(Calendar.SECOND);
    }


    /**
     * 获得当前日期的字符串格式
     *
     * @param format 格式化的类型
     * @return 返回格式化之后的事件
     */
    public static String getCurDateStr(String format) {
        Calendar c = Calendar.getInstance();
        return date2Str(c, format);

    }


    /**
     * @param time 当前的时间
     * @return 格式到秒
     */
    //
    public static String getMillon(long time) {

        return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(time);

    }


    /**
     * @param time 当前的时间
     * @return 当前的天
     */
    public static String getDay(long time) {

        return new SimpleDateFormat("yyyy-MM-dd").format(time);

    }

    /**
     * 获取支付时间
     *
     * @param time 支付时的时间戳
     * @return 支付时间
     */
    public static String getPayTime(long time) {

        return new SimpleDateFormat("yyyy.MM.dd").format(time);

    }


    /**
     * @param time 当前的时间
     * @return 当前的天
     */
    public static String getTimeByFormat(String format, long time) {

        return new SimpleDateFormat(format).format(time);

    }


//    /**
//     * @param time 时间
//     * @return 返回一个毫秒
//     */
//    // 格式到毫秒
//    public static String getSMillon(long time) {
//
//        return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS").format(time);
//
//    }


//    /**
//     * 在日期上增加数个整月
//     *
//     * @param date 日期
//     * @param n    要增加的月数
//     * @return 增加数个整月
//     */
//    public static Date addMonth(Date date, int n) {
//        Calendar cal = Calendar.getInstance();
//        cal.setTime(date);
//        cal.add(Calendar.MONTH, n);
//        return cal.getTime();
//
//    }


//    /**
//     * 在日期上增加天数
//     *
//     * @param date 日期
//     * @param n    要增加的天数
//     * @return 增加之后的天数
//     */
//    public static Date addDay(Date date, int n) {
//        Calendar cal = Calendar.getInstance();
//        cal.setTime(date);
//        cal.add(Calendar.DATE, n);
//        return cal.getTime();
//
//    }


//    /**
//     * 获取距现在某一小时的时刻
//     *
//     * @param format 格式化时间的格式
//     * @param h      距现在的小时 例如：h=-1为上一个小时，h=1为下一个小时
//     * @return 获取距现在某一小时的时刻
//     */
//    public static String getNextHour(String format, int h) {
//        SimpleDateFormat sdf = new SimpleDateFormat(format);
//        Date date = new Date();
//        date.setTime(date.getTime() + h * 60 * 60 * 1000);
//        return sdf.format(date);
//
//    }


//    /**
//     * 获取时间戳
//     *
//     * @return 获取时间戳
//     */
//    public static String getTimeString() {
//        SimpleDateFormat df = new SimpleDateFormat(FORMAT_FULL);
//        Calendar calendar = Calendar.getInstance();
//        return df.format(calendar.getTime());
//
//    }


//    /**
//     * 功能描述：返回月
//     *
//     * @param date Date 日期
//     * @return 返回月份
//     */
//    public static int getMonth(Date date) {
//        calendar = Calendar.getInstance();
//        calendar.setTime(date);
//        return calendar.get(Calendar.MONTH) + 1;
//    }


//    /**
//     * 功能描述：返回日
//     *
//     * @param date Date 日期
//     * @return 返回日份
//     */
//    public static int getDay(Date date) {
//        calendar = Calendar.getInstance();
//        calendar.setTime(date);
//        return calendar.get(Calendar.DAY_OF_MONTH);
//    }


//    /**
//     * 功能描述：返回小
//     *
//     * @param date 日期
//     * @return 返回小时
//     */
//    public static int getHour(Date date) {
//        calendar = Calendar.getInstance();
//        calendar.setTime(date);
//        return calendar.get(Calendar.HOUR_OF_DAY);
//    }


//    /**
//     * 功能描述：返回分
//     *
//     * @param date 日期
//     * @return 返回分钟
//     */
//    public static int getMinute(Date date) {
//        calendar = Calendar.getInstance();
//        calendar.setTime(date);
//        return calendar.get(Calendar.MINUTE);
//    }


    /**
     * 获得默认的 date pattern
     *
     * @return 默认的格式
     */
    public static String getDatePattern() {

        return FORMAT_YMDHMS;
    }


//    /**
//     * 返回秒钟
//     *
//     * @param date Date 日期
//     * @return 返回秒钟
//     */
//    public static int getSecond(Date date) {
//        calendar = Calendar.getInstance();
//
//        calendar.setTime(date);
//        return calendar.get(Calendar.SECOND);
//    }


    /**
     * 使用预设格式提取字符串日期
     *
     * @param strDate 日期字符串
     * @return 提取字符串的日期
     */
    public static Date parse(String strDate) {
        return parse(strDate, getDatePattern());

    }


//    /**
//     * 功能描述：返回毫
//     *
//     * @param date 日期
//     * @return 返回毫
//     */
//    public static long getMillis(Date date) {
//        calendar = Calendar.getInstance();
//        calendar.setTime(date);
//        return calendar.getTimeInMillis();
//    }


//    /**
//     * 按默认格式的字符串距离今天的天数
//     *
//     * @param date 日期字符串
//     * @return 按默认格式的字符串距离今天的天数
//     */
//    public static int countDays(String date) {
//        long t = Calendar.getInstance().getTime().getTime();
//        Calendar c = Calendar.getInstance();
//        c.setTime(parse(date));
//        long t1 = c.getTime().getTime();
//        return (int) (t / 1000 - t1 / 1000) / 3600 / 24;
//
//    }


    /**
     * 使用用户格式提取字符串日期
     *
     * @param strDate 日期字符串
     * @param pattern 日期格式
     * @return 提取字符串日期
     */
    public static Date parse(String strDate, String pattern) {
        SimpleDateFormat df = new SimpleDateFormat(pattern);
        try {
            return df.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }

    }


//    /**
//     * 按用户格式字符串距离今天的天数
//     *
//     * @param date   日期字符串
//     * @param format 日期格式
//     * @return 按用户格式字符串距离今天的天数
//     */
//    public static int countDays(String date, String format) {
//        long t = Calendar.getInstance().getTime().getTime();
//        Calendar c = Calendar.getInstance();
//        c.setTime(parse(date, format));
//        long t1 = c.getTime().getTime();
//        return (int) (t / 1000 - t1 / 1000) / 3600 / 24;
//
//    }

//    /**
//     * 仅对比两个Date的时间（不对比日期）
//     *
//     * @param baseDate
//     * @param compareDate
//     * @return
//     */
//    public static boolean compareTime(Date baseDate, Date compareDate) {
//
//        int baseTime = getTime(baseDate);
//        int compareTime = getTime(compareDate);
//        return compareTime >= baseTime;
//    }

    /**
     * 获取Date的秒数
     *
     * @return
     */
    public static int getTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);
        int time = hour * 3600 + minute * 60 + second;

        //LogUtil.d(TAG, "time: hour:" + hour + ",minute:" + minute + ",second:" + second);
        return time;
    }


//    public void setAutoTimeZone(Context context, int checked) {
//        android.provider.Settings.Global.putInt(context.getContentResolver(),
//                android.provider.Settings.Global.AUTO_TIME_ZONE, checked);
//    }


//    public void setTimeZone(String timeZone) {
//        //GMT+8
//        final Calendar now = Calendar.getInstance();
//        TimeZone tz = TimeZone.getTimeZone(timeZone);
//        now.setTimeZone(tz);
//    }


    public static String getCurrentDay() {

        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        return format.format(new Date());

    }

    public static String getLogUploadDay() {

        SimpleDateFormat format = new SimpleDateFormat(FORMAT_YYMD);
        return format.format(new Date());

    }


    /**
     * 是否小于7天
     *
     * @param littleDay yyyyMMdd格式的日期
     * @param bigDay    yyyyMMdd格式的日期
     * @return true 小于7天
     * false 大于7天
     */
    public static boolean needUpload(String littleDay, String bigDay) {

        Calendar lCalendar = str2Calendar(littleDay, FORMAT_YYMD);
        Calendar bCalendar = str2Calendar(bigDay, FORMAT_YYMD);

        if (lCalendar == null || bCalendar == null)
            return false;

        lCalendar.set(Calendar.HOUR_OF_DAY, 0);
        lCalendar.set(Calendar.MINUTE, 0);
        lCalendar.set(Calendar.SECOND, 0);
        lCalendar.set(Calendar.MILLISECOND, 0);

        bCalendar.set(Calendar.HOUR_OF_DAY, 0);
        bCalendar.set(Calendar.MINUTE, 0);
        bCalendar.set(Calendar.SECOND, 0);
        bCalendar.set(Calendar.MILLISECOND, 0);

        long lTime = lCalendar.getTimeInMillis();
        long bTime = bCalendar.getTimeInMillis();

        int lMonth = lCalendar.get(Calendar.MONTH);
        int lDay = lCalendar.get(Calendar.DAY_OF_MONTH);

        int bMonth = bCalendar.get(Calendar.MONTH);
        int bDay = bCalendar.get(Calendar.DAY_OF_MONTH);


        if (lMonth == bMonth && lDay == bDay)
            return false;

        return (bTime - lTime) < 1000 * 60 * 60 * 24 * 7;

    }


    /**
     * @param day yyyyMMdd格式的日期
     * @return
     */
    public static boolean isToday(String day) {

        Calendar cal = str2Calendar(day, FORMAT_YYMD);

        if (cal == null)
            return false;

        int mYear = cal.get(Calendar.DAY_OF_YEAR);
        int mMonth = cal.get(Calendar.DAY_OF_MONTH);
        int mDay = cal.get(Calendar.DAY_OF_MONTH);

        Calendar c = Calendar.getInstance();
        int cYear = c.get(Calendar.DAY_OF_YEAR);
        int cMonth = c.get(Calendar.DAY_OF_MONTH);
        int cDay = c.get(Calendar.DAY_OF_MONTH);

        return mYear == cYear && mMonth == cMonth && mDay == cDay;

    }

    /**
     * 是否大于7天
     *
     * @param littleDay yyyyMMdd格式的日期
     * @param bigDay    yyyyMMdd格式的日期
     * @return
     */
    public static boolean need7Delete(String littleDay, String bigDay) {

        Calendar lCalendar = str2Calendar(littleDay, FORMAT_YYMD);
        Calendar bCalendar = str2Calendar(bigDay, FORMAT_YYMD);

        if (lCalendar == null || bCalendar == null)
            return false;

        lCalendar.set(Calendar.HOUR_OF_DAY, 0);
        lCalendar.set(Calendar.MINUTE, 0);
        lCalendar.set(Calendar.SECOND, 0);
        lCalendar.set(Calendar.MILLISECOND, 0);

        bCalendar.set(Calendar.HOUR_OF_DAY, 0);
        bCalendar.set(Calendar.MINUTE, 0);
        bCalendar.set(Calendar.SECOND, 0);
        bCalendar.set(Calendar.MILLISECOND, 0);

        long lTime = lCalendar.getTimeInMillis();
        long bTime = bCalendar.getTimeInMillis();

        return (bTime - lTime) > 1000 * 60 * 60 * 24 * 7;

    }


//    /**
//     * 获取本周的第一天是多少号   以周一为本周的第一天
//     */
//    public int getFirstDayOfWeek(Calendar calendar) {
//        int mondayPlus = 0;
//        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;//一周一为一周的第一天
//        if (dayOfWeek == 1) {
//            mondayPlus = 0;
//        } else {
//            mondayPlus = 1 - dayOfWeek;
//        }
//        GregorianCalendar currentDate = new GregorianCalendar();
//        currentDate.add(GregorianCalendar.DATE, mondayPlus);
//        Date monday = currentDate.getTime();
//        DateFormat df = DateFormat.getDateInstance();
//        String preMonday = df.format(monday);
//        return Integer.parseInt(preMonday.split("-")[2]);
//    }

    /**
     * 获取本月的第几天
     * 2020-10-16 21:55:00
     *
     * @return
     */
    public static int getDaysOfMonth() {
        Calendar calendar = Calendar.getInstance();
        return calendar.get(Calendar.DAY_OF_MONTH);
    }


    /**
     * 是否是在购彩时间
     *
     * @param startTime
     * @param stopTime
     * @return
     */
    public static boolean canBuy(String startTime, String stopTime) throws Exception {

        if (TextUtils.isEmpty(startTime) && TextUtils.isEmpty(stopTime))
            return true;

        long ct = System.currentTimeMillis();

        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(FORMAT_YMDHMS);

            long spT = 0;//结束时间
            if (TextUtils.isEmpty(startTime)) {
                spT = simpleDateFormat.parse(stopTime).getTime();
                return spT > ct;
            }

            //开始时间
            long saT = simpleDateFormat.parse(startTime).getTime();

            return ct >= saT && ct < spT;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }


    /**
     * @return
     */
    public static String getDistanceTime(long diff) {

        long day = 0;//天数差
        long hour = 0;//小时数差
        long min = 0;//分钟数差
        long second = 0;//秒数差

        day = diff / (24 * 60 * 60 * 1000);
//            Log.i("lgq","diff--==="+diff+"...one="+time1+"..-----.two==="+time2);
        hour = (diff / (60 * 60 * 1000) - day * 24);
        min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
        second = ((diff / (1000)) - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);

        String result = "";
        if (day > 0) {
            result = result + day + "天 ";
        }

        if (hour > 0)
            result = result + (hour >= 10 ? hour : ("0" + hour)) + ":";
        else
            result = result + "00:";

        if (min > 0)
            result = result + (min >= 10 ? min : ("0" + min)) + ":";
        else
            result = result + "00:";

        if (second > 0)
            result = result + (second >= 10 ? second : ("0" + second)) + "";
        else
            result = result + "00";

        return result;
    }

    /**
     * 日期转时间戳
     *
     * @param format
     * @param s
     */
    public static long dateTimeStamp(String format, String s) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        Date date = new Date();
        date = simpleDateFormat.parse(s);
        long time = date.getTime();
        return time / 1000L;
    }

    public static long dateTimeStamp( String s) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(FORMAT_YMDHMS);
        Date date = new Date();
        date = simpleDateFormat.parse(s);
        long time = date.getTime();
        return time;
    }
}
